//package com.htstar.ovms.gateway.filter.log;
//
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.cloud.gateway.filter.GatewayFilterChain;
//import org.springframework.cloud.gateway.filter.GlobalFilter;
//import org.springframework.core.io.buffer.DataBuffer;
//import org.springframework.core.io.buffer.DataBufferUtils;
//import org.springframework.http.HttpHeaders;
//import org.springframework.http.HttpMethod;
//import org.springframework.http.MediaType;
//import org.springframework.http.server.reactive.ServerHttpRequest;
//import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
//import org.springframework.stereotype.Component;
//import org.springframework.web.server.ServerWebExchange;
//import reactor.core.publisher.Flux;
//import reactor.core.publisher.Mono;
//
//import java.nio.charset.StandardCharsets;
//import java.util.Map;
//import java.util.Objects;
//import java.util.stream.Collectors;
//
///**
// * @author MinWeikai
// * @date 2019-12-20 18:09:39
// */
//@Slf4j
//@Component
//public class LoggerFilter implements GlobalFilter {
//
//	@Override
//	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//		ServerHttpRequest request = exchange.getRequest();
//		String method = request.getMethodValue();
//
//		HttpHeaders headers = request.getHeaders();
//		MediaType mediaType = headers.getContentType();
//
//		if (Objects.nonNull(mediaType) && LogHelper.isUploadFile(mediaType)) {
//			log.info("\n" + "----------------             ----------------             ---------------->>\n" +
//							"HttpMethod : {}\n" +
//							"Uri        : {}\n" +
//							"Param      : {}\n" +
//							"Headers    : \n" +
//							"{}\n" +
//							"\"<<----------------             ----------------             ----------------"
//					, method, "上传文件", "", headers);
//		}else if (HttpMethod.POST.matches(method) || HttpMethod.PUT.matches(method)) {
//			return DataBufferUtils.join(exchange.getRequest().getBody())
//					.flatMap(dataBuffer -> {
//						byte[] bytes = new byte[dataBuffer.readableByteCount()];
//						dataBuffer.read(bytes);
//						String bodyString = new String(bytes, StandardCharsets.UTF_8);
//						logtrace(exchange, bodyString);
//						exchange.getAttributes().put("POST_BODY", bodyString);
//						DataBufferUtils.release(dataBuffer);
//						Flux<DataBuffer> cachedFlux = Flux.defer(() -> {
//							DataBuffer buffer = exchange.getResponse().bufferFactory()
//									.wrap(bytes);
//							return Mono.just(buffer);
//						});
//
//						ServerHttpRequest mutatedRequest = new ServerHttpRequestDecorator(
//								exchange.getRequest()) {
//							@Override
//							public Flux<DataBuffer> getBody() {
//								return cachedFlux;
//							}
//						};
//						return chain.filter(exchange.mutate().request(mutatedRequest)
//								.build());
//					});
//		} else if (HttpMethod.GET.matches(method)) {
//			Map m = request.getQueryParams();
//			logtrace(exchange, m.toString());
//		}
//		return chain.filter(exchange);
//	}
//
//	/**
//	 * 日志信息
//	 *
//	 * @param exchange
//	 * @param param    请求参数
//	 */
//	private void logtrace(ServerWebExchange exchange, String param) {
//		ServerHttpRequest serverHttpRequest = exchange.getRequest();
//		String path = serverHttpRequest.getURI().getPath();
//		String method = serverHttpRequest.getMethodValue();
//		String headers = serverHttpRequest.getHeaders().entrySet()
//				.stream()
//				.map(entry -> "            " + entry.getKey() + ": [" + String.join(";", entry.getValue()) + "]")
//				.collect(Collectors.joining("\n"));
//		log.info("\n" + "----------------             ----------------             ---------------->>\n" +
//						"HttpMethod : {}\n" +
//						"Uri        : {}\n" +
//						"Param      : {}\n" +
//						"Headers    : \n" +
//						"{}\n" +
//						"\"<<----------------             ----------------             ----------------"
//				, method, path, param, headers);
//	}
//
//}